//2016-5-26 郑捷 创建
#ifndef ModbusSlaveRTU_H
#define ModbusSlaveRTU_H

#if defined(ARDUINO) && ARDUINO >= 100 // 版本兼容设置
	#include <Arduino.h>
#else
	#include <WProgram.h>
#endif

class ModbusSlaveRTU {
public:
	void begin(HardwareSerial *SerialPort,unsigned long baud,uint8_t config,
				unsigned int *pointData,unsigned int DataNum);	//初始化函数
	void task(void);										//通信处理函数
	unsigned char SlaveID=1;					//通信站号
private:
	void dataHandle(void); //指令处理函数
	void responseError(unsigned char wrongNumber);	//错误信息返回函数
	unsigned int calculateCRC(unsigned char* regs,unsigned char arraySize);	//CRC校验函数
	unsigned int calculateCRC1(unsigned char* regs,unsigned char arraySize);	//备用CRC校验函数
	HardwareSerial *pModbusPort;		//用于保存使用MODBUS通信的串口
	unsigned int characterTime; 	//0.1个字符的时间，单位us
	unsigned int *pDataTable; 		//建立连接modbus寄存器数据库
	unsigned int DataTableCount=0;		//modbus数据库大小
	#define bufferSize 128				//一帧数据的最大字节数量
	unsigned char frame[bufferSize];	//用于保存接收或发送的数据
	unsigned char address=0;		//接收数据索引
	unsigned long lastreadtime;		//上次阅读有数据的时间
	unsigned char state=0;			//从站状态
	unsigned char needSendBytes=0;	//需要发送数据的字节数
};
#endif
